<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // let  ES6 新增声明变量的关键词

    // var 和 let 的共同点和区别?
    // 共同点
    // 都可以用于创建局部变量和全局变量

    // 不同点
    // 1. var 声明的变量有变量提升,let 没有,提前访问会报错
    // 2. var 声明的变量可以重复声明,let 重复声明会报错(可以重新赋值)
    // 3. ES6新增块级作用域 (成对{} => 对象除外),在块级作用域中 let声明的变量是局部变量(只在块级作用域中生效)  块级作用域对var没有影响

    // 关于变量提升
    // console.log(a);
    // console.log(b);   // 报错: Cannot access 'b' before initialization(在初始化之前不能访问'b')

    /* var a = 10;
    let b = 20;
    console.log(a,b);

    // 关于重复声明
    // var a = "a";
    // let b = "b";   // 报错: Identifier 'b' has already been declared (标识符'b'已经声明)
    // console.log(a,b);

    // 关于重新赋值
    a = "a";
    b = "b";   // 报错: Identifier 'b' has already been declared (标识符'b'已经声明)
    console.log(a,b);

    function fn(){
        var a = 100;
        let b = 200;
        console.log(a,b);
    }
    fn(); */



    // 关于块级作用域  ES6新增块级作用域 (成对{} => 对象除外)
    // if(){}
    // if...else...
    // if...else if... else
    // switch(){}
    // while(){}
    // do{}while()
    // for(){}
    // {}

    {
        var a = 10;
        let b = 20;
        console.log(a,b);
    }
    console.log(a,b);

    function fn(){
        {
            var a = 10;
            let b = 20;
            console.log(a,b);
        }
        console.log(a,b);
    }

 



</script>
</html>